import 'package:flutter/material.dart';
import 'package:ping_discover_network/ping_discover_network.dart';

// 创建 StatefulWidget 类型的 NetworkScannerPage
class NetworkScannerPage extends StatefulWidget {
  @override
  _NetworkScannerPageState createState() => _NetworkScannerPageState();
}

// _NetworkScannerPageState 类管理 NetworkScannerPage 的状态
class _NetworkScannerPageState extends State<NetworkScannerPage> {
  final int port = 80;  // 选择你想要扫描的端口，这里使用常见的HTTP端口
  List<String> _foundDevices = [];  // 存储发现的设备IP地址

  @override
  void initState() {
    super.initState();
    discoverDevices();  // 组件加载完成时启动设备发现功能
  }

  // 设备发现函数
  void discoverDevices() {
    final String subnet = '192.168.0';  // 定义要扫描的子网前缀，实际使用时需要根据您的网络环境调整
    final stream = NetworkAnalyzer.discover2(subnet, port, timeout: Duration(milliseconds: 5000));
    // 监听网络分析的结果
    stream.listen((NetworkAddress addr) {
      if (addr.exists) {  // 如果发现设备存在
        setState(() {
          _foundDevices.add(addr.ip);  // 将设备的IP地址添加到列表中
        });
      }
    }).onDone(() {
      print("完成扫描");  // 当扫描完成时输出
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('网络设备扫描'),  // 应用栏标题
        ),
        body: ListView.builder(
          itemCount: _foundDevices.length,  // 列表项数等于发现的设备数
          itemBuilder: (context, index) {
            return ListTile(
              title: Text(_foundDevices[index]),  // 列表项标题显示设备的IP地址
            );
          },
        ),
      ),
    );
  }

  @override
  void dispose() {
    super.dispose();  // 组件销毁时执行的操作
  }
}